package com.fourforfo.fourmall.product.vo;

import com.fourforfo.fourmall.product.entity.SkuImagesEntity;
import com.fourforfo.fourmall.product.entity.SkuInfoEntity;
import com.fourforfo.fourmall.product.entity.SpuInfoDescEntity;
import com.fourforfo.fourmall.product.to.SeckillSkuRedisTO;
import lombok.Data;

import java.util.List;

/**
 * 商品详情页
 *  封装查询商品时需要返回的跟商品详情有关的数据
 *      1.获取sku的基本信息  pms_sku_info
 *      2.获取sku的图片信息 pms_sku_images
 *      3.获取spu的介绍
 *      4.获取spu的所有销售属性	1s
 *      5.获取Spu规格参数组及组下的规格参数	1s
 */
@Data
public class ProductItemVO {
//        1.获取sku的基本信息  pms_sku_info
    SkuInfoEntity skuInfo;

//        1.1 hasStock 是否有货 默认为false
    boolean hasStock = false;

//       2.获取sku的图片信息 pms_sku_images
    List<SkuImagesEntity> skuImages;


//       3.获取spu的介绍图片 pms_spu_info_desc
    SpuInfoDescEntity spuInfoDesc;

//       4.获取spu的所有销售属性	1s pms_sku_sale_attr_value
    List<SkuItemSaleAttrsVO> skuAttrs;

//       5.获取Spu规格参数组及组下的规格参数	属性分组、属性名和属性值
    List<SpuItemBaseAttrVO> attrGroups;

    //6.秒杀信息
    SeckillSkuRedisTO seckillSku;

    /**
     * spu的销售属性,attrName和attrValue按一对多展示在商品详情页
     */
    @Data
    public static class SkuItemSaleAttrsVO{
        private Long attrId;

        private String attrName;

        private List<AttrValueWithSkuIdVO> attrValueWithSkuIdVOS;

    }

    /**
     * 封装attrValue以及attrValue对应的spuId集合，spuIds是sql中的GROUP_CONTACT()连接的skuId集合
     */
    @Data
    public static class AttrValueWithSkuIdVO{
        private String attrValue;
        private String skuIds;
    }

    /**
     * Spu规格参数组及组下的规格参数	属性分组、属性名和属性值
     *  一个属性分组对于多条属性名：属性值
     */
    @Data
    public static class SpuItemBaseAttrVO{

        private String groupName;

        private List<SpuBaseAttrVO> spuBaseAttrs;


    }


    /**
     * SpuItemBaseAttrVO的内部类：包含属性名和属性值
     */
    @Data
    public static class SpuBaseAttrVO{
        private String attrName;
        private String attrValue;
    }

}
